package com.qf.lanzhou.blog.api.dao;

import com.qf.lanzhou.blog.api.pojo.entity.User;

import java.util.List;

/**
 * @author LEON-HE
 */
public interface UserDao {
    /**
     * 通过用户名查找用户，适用于登录功能
     * @param userName 用户名
     * @return 返回用户对象存入session
     */
    User selectUserByUserName(String userName);

    /**
     * 通过手机号码查找用户是否存在，适用于忘记密码功能
     * @param phone 手机号码
     * @return 用户存在返回false，否则为true
     */
    Boolean selectUserByPhone(String phone);
    /**
     * 通过手机号码查找用户是否存在
     * @param phone 手机号码
     * @return 用户存在返回用户名
     */
    String selectUserNameByPhone(String phone);

    /**
     * 注册用户，适用于注册功能，保存为普通用户权限
     * @param user 用户对象
     * @return 返回true成功
     */
    Boolean saveUser(User user);

    /**
     * 删除用户，使用与admin删除用户功能
     * @param id 用户的ID
     * @return 删除成功返回true
     */
    Boolean deleteUserByUserId(Long id);

    /**
     * 修改用户信息，适用于用户修改信息功能
     * @param id 用户的id
     * @return 修改完成后需重新把新信息存入session
     */
    Boolean updateUserByUserId(Long id);

    /**
     * 删除用户
     * @param userName 用户名
     * @return 修改成功后返回1，失败返回0；
     */
    int deleteUserByUserName(String userName);

    /**
     * 展示用户信息
     * @return List 集合存放User对象
     */
    List<User> showUserList();

    /**
     * 更新用户登录时间
     * @param name 用户名
     * @return
     */
    Boolean updateLoginTime(String name);

    /**
     * 修改用户密码
     * @param password
     * @param userName
     * @return 修改成功后返回1，失败返回0；
     */
    int updatePassword(String password,String userName);

    /**
     * 用户查询用户表，展示除了自己外所有用
     * @param name
     * @return 返回除了当前用户外的所有用户
     */
    List<User> selectAllExclusionUser(String name);

    /**
     * 修改用户信息（邮箱或者电话）
     * @param email
     * @param phone
     * @param user
     * @return
     */
    int udateMsg(String email,String phone,User user);

    /**
     * 判断管理员 是否为 管理员
     * @param sql
     * @param userId
     * @return
     */
  Long checkAdmin(String sql,Long userId);

    /**
     * 设置某用户为管理员
     * @param userId
     * @return
     */
  int updateUserRole(Long userId);

    /**
     * 检查管理员是否满员
     * @param sql
     * @param
     * @return
     */
  Long checkAminFull(String sql);
}
